const express = require('express');

// 实体类
const Login = require('../entity/login/Login');
const Response = require('../entity/http/Response');

// 业务层
const loginService = require('../service/login');

const router = express.Router();

/**
 * @apiName 用户登录接口
 * @param { string } account     用户账号
 * @param { string } password    用户密码
 * @pseudocode 运行逻辑:
 *                 1. 验证用户登录账号和密码是否正确之后
 *                 2. 查询该用户属于什么用户类型
 *                 3. 包含用户类型和用户id一起封装在token里返回
 *                 4. 同时需要返回一部分的用户信息提供给前端直接展示 (这个接口考虑要不要另开一个接口)
 */
router.post('/login', function (req, res, next) {
    console.log(`[ REQUEST ] [ req-id = ${ req.requestId } ] [ Controller ] 请求进入 POST /login/login`);
    let login_data;
    try {
        login_data = new Login(req.body);
    } catch (err) {
        return res.status(400).json(new Response().fail(400, "登录参数有误"));
    }
    console.log(`[ INFO ] [ req-id = ${ req.requestId } ] [ Controller ] 登录参数 ${ JSON.stringify(login_data) }`);
    // 登录时由于不存在任何用户 uid 的值直接传递 0 代表此时不属于系统内的任何用户
    loginService.login(req.requestId, 0, login_data).then(result => {
        console.log(`[ RESPONSE ] [ req-id = ${ req.requestId } ] [ Controller ] 登录响应 ${ JSON.stringify(result) }`);
        return res.status(result.code).json(result);
    }).catch(err => {
        console.log(`[ ERROR ] [ req-id = ${ req.requestId } ] [ Controller ] 登陆时服务器内部错误 ${ err.message }`);
        return res.status(500).json(new Response().fail(500, '服务器内部错误'));
    });
});

module.exports = router;